package dto

import "encoding/json"

// CouponInfoDto 优惠券信息DTO
//
// @author liaochangyi
// @since 2025-01-25
type CouponInfoDto struct {
	PromotionId                *string `json:"promotion_id,omitempty"`                 // 券ID
	Name                       *string `json:"name,omitempty"`                         // 优惠名称
	Scope                      *string `json:"scope,omitempty"`                        // 优惠范围
	Type                       *string `json:"type,omitempty"`                         // 优惠类型
	Amount                     *string `json:"amount,omitempty"`                       // 优惠券面额
	ActivityId                 *string `json:"activity_id,omitempty"`                  // 活动ID
	WxpayContribute            *string `json:"wxpay_contribute,omitempty"`             // 微信出资
	MerchantContribute         *string `json:"merchant_contribute,omitempty"`          // 商户出资
	Id                         *string `json:"id,omitempty"`                           // 支付宝券ID
	OtherContribute            *string `json:"other_contribute,omitempty"`             // 其他出资金额
	Memo                       *string `json:"memo,omitempty"`                         // 备注信息
	TemplateId                 *string `json:"template_id,omitempty"`                  // 券模板ID
	OtherContributeDetail      *string `json:"other_contribute_detail,omitempty"`      // 优惠券的其他出资方明细
	PurchaseBuyerContribute    *string `json:"purchase_buyer_contribute,omitempty"`    // 买家出资
	PurchaseMerchantContribute *string `json:"purchase_merchant_contribute,omitempty"` // 商户出资
	PurchaseAntContribute      *string `json:"purchase_ant_contribute,omitempty"`      // 内部出资
	SpnsrId                    *string `json:"spnsr_id,omitempty"`                     // 出资方
	OffstAmt                   *string `json:"offst_amt,omitempty"`                    // 优惠金额
	Desc                       *string `json:"desc,omitempty"`                         // 项目简称
	AddnInfo                   *string `json:"addn_info,omitempty"`                    // 附加信息
	IssuerId                   *string `json:"issuer_id,omitempty"`                    // 项目发行方
}

// NewCouponInfoDto 创建新的优惠券信息DTO实例
func NewCouponInfoDto() *CouponInfoDto {
	return &CouponInfoDto{}
}

// SetPromotionId 设置券ID
func (c *CouponInfoDto) SetPromotionId(promotionId string) *CouponInfoDto {
	c.PromotionId = &promotionId
	return c
}

// SetName 设置优惠名称
func (c *CouponInfoDto) SetName(name string) *CouponInfoDto {
	c.Name = &name
	return c
}

// SetScope 设置优惠范围
func (c *CouponInfoDto) SetScope(scope string) *CouponInfoDto {
	c.Scope = &scope
	return c
}

// SetType 设置优惠类型
func (c *CouponInfoDto) SetType(couponType string) *CouponInfoDto {
	c.Type = &couponType
	return c
}

// SetAmount 设置优惠券面额
func (c *CouponInfoDto) SetAmount(amount string) *CouponInfoDto {
	c.Amount = &amount
	return c
}

// SetActivityId 设置活动ID
func (c *CouponInfoDto) SetActivityId(activityId string) *CouponInfoDto {
	c.ActivityId = &activityId
	return c
}

// SetWxpayContribute 设置微信出资
func (c *CouponInfoDto) SetWxpayContribute(wxpayContribute string) *CouponInfoDto {
	c.WxpayContribute = &wxpayContribute
	return c
}

// SetMerchantContribute 设置商户出资
func (c *CouponInfoDto) SetMerchantContribute(merchantContribute string) *CouponInfoDto {
	c.MerchantContribute = &merchantContribute
	return c
}

// SetId 设置支付宝券ID
func (c *CouponInfoDto) SetId(id string) *CouponInfoDto {
	c.Id = &id
	return c
}

// SetOtherContribute 设置其他出资金额
func (c *CouponInfoDto) SetOtherContribute(otherContribute string) *CouponInfoDto {
	c.OtherContribute = &otherContribute
	return c
}

// SetMemo 设置备注信息
func (c *CouponInfoDto) SetMemo(memo string) *CouponInfoDto {
	c.Memo = &memo
	return c
}

// SetTemplateId 设置券模板ID
func (c *CouponInfoDto) SetTemplateId(templateId string) *CouponInfoDto {
	c.TemplateId = &templateId
	return c
}

// SetOtherContributeDetail 设置优惠券的其他出资方明细
func (c *CouponInfoDto) SetOtherContributeDetail(otherContributeDetail string) *CouponInfoDto {
	c.OtherContributeDetail = &otherContributeDetail
	return c
}

// SetPurchaseBuyerContribute 设置买家出资
func (c *CouponInfoDto) SetPurchaseBuyerContribute(purchaseBuyerContribute string) *CouponInfoDto {
	c.PurchaseBuyerContribute = &purchaseBuyerContribute
	return c
}

// SetPurchaseMerchantContribute 设置商户出资
func (c *CouponInfoDto) SetPurchaseMerchantContribute(purchaseMerchantContribute string) *CouponInfoDto {
	c.PurchaseMerchantContribute = &purchaseMerchantContribute
	return c
}

// SetPurchaseAntContribute 设置内部出资
func (c *CouponInfoDto) SetPurchaseAntContribute(purchaseAntContribute string) *CouponInfoDto {
	c.PurchaseAntContribute = &purchaseAntContribute
	return c
}

// SetSpnsrId 设置出资方
func (c *CouponInfoDto) SetSpnsrId(spnsrId string) *CouponInfoDto {
	c.SpnsrId = &spnsrId
	return c
}

// SetOffstAmt 设置优惠金额
func (c *CouponInfoDto) SetOffstAmt(offstAmt string) *CouponInfoDto {
	c.OffstAmt = &offstAmt
	return c
}

// SetDesc 设置项目简称
func (c *CouponInfoDto) SetDesc(desc string) *CouponInfoDto {
	c.Desc = &desc
	return c
}

// SetAddnInfo 设置附加信息
func (c *CouponInfoDto) SetAddnInfo(addnInfo string) *CouponInfoDto {
	c.AddnInfo = &addnInfo
	return c
}

// SetIssuerId 设置项目发行方
func (c *CouponInfoDto) SetIssuerId(issuerId string) *CouponInfoDto {
	c.IssuerId = &issuerId
	return c
}

// ToJSON 转换为JSON字符串
func (c *CouponInfoDto) ToJSON() (string, error) {
	data, err := json.Marshal(c)
	if err != nil {
		return "", err
	}
	return string(data), nil
}

// FromJSON 从JSON字符串创建实例
func (c *CouponInfoDto) FromJSON(jsonStr string) error {
	return json.Unmarshal([]byte(jsonStr), c)
}
